<?php namespace Admin\Controller;
use Hdphp\Controller\Controller;
/**
 * 商品管理控制器
 */
Class GoodsController extends CommonController{
	private $model;
	/**
	 * [__auto 自动载入实例化模型，Goods表]
	 * @return [type] [description]
	 */
	public function __auto(){
		$this->model = new \Common\Model\Goods;
	}
	/**
	 * [index 显示商品(商品列表)]
	 * @return [type] [description]
	 */
	public function index(){
		// 获取数据
		$data = $this->model->get();
		// p($data);
		//   [1] => Array
  //       (
  //           [gid] => 39
  //           [gname] => 韩版中长款宽松不规则下摆蝙蝠袖T恤 短袖T恤女 
  //           [gnumber] => 4444
  //           [unit] => 件
  //           [marketprice] => 555
  //           [shopprice] => 333
  //           [pic] => Upload/list/160731/26701469931369.jpg,Upload/list/160731/20491469931368.jpg
  //           [click] => 33322
  //           [time] => 1469931420
  //           [aid] => 1
  //           [tid] => 16
  //           [bid] => 9
  //           [cid] => 30
  //       )
      	//为了获取到货品列表下的库存数据，得实例化数据GoodsList,并得到下面的number字段，在将其进行相加就行了.
      	$gids = array();//获取需要的gid.
		foreach ($data as $key => $value) {
			$gids[] = $value['gid'];
		}
		// p($gids);
		// Array
		// (
		//     [0] => 1
		//     [1] => 2
		//     [2] => 3
		// )
      	$GoodsListModel = new \ Common\Model\GoodsList;
      	$inventory = array();//将相同的gid的库存数据进行获取出来，并将其进行相加
		foreach ($gids as $key => $value) {
			// p($value);
      		$inventory[$value] = $GoodsListModel->where(array('gid'=>$value))->lists('inventory');
      		// p($inventory);
		}
		// p($inventory);//循环出来的键名为gid值，可以根据这个去进行追加总库存.
		$totalArr = array();
		foreach($inventory as $k=>$v){
			$v = empty($v)? array():$v;//判断所循环的健值是否为空，若为空则给个默认空数组，
			$totalArr[$k] = 0;
			foreach ($v as $key => $value) {
				// p($value);
				$totalArr[$k] += $value;
			}
			
		}
		// p($totalArr);
		// Array
		// (
		//     [1] => 132
		//     [2] => 88
		//     [3] => 1208
		// )
		// p($data);
		foreach ($data as $key => $value) {
			// p($value);
			foreach ($totalArr as $k => $v) {
				if($value['gid']==$k){
					$data[$key]['inventory'] = $v;   //做判断，若gid相等的情况下，将该数据进行压入到该数组里面
				}
			}
		}
		// p($data);
		$this->assign('data',$data);
		$this->display();
	}
	/**
	 * [add 添加商品]
	 * [需要进行添加三张数据表][商品表(goods)]、[商品属性表(goods_attr)]、[商品详情表(goods_detail)]
	 */
	public function add(){
		// 2、判断是否为post提交，
		if(IS_POST){
			// p($_POST);
			if($this->model->addGoods()){
				// die;
				$this->success('添加成功',U('Goods/index'));
			}
			// die;
			$this->error($this->model->getError());
		}

		//1、 实例化cate方法，并获取到该数据，将其分配到页面中去.
		$cateModel = new \Common\Model\Cate;
		$cateData = $cateModel->get();
		// p($cateData);
		$cateData = Data::tree($cateData,'cname');
		// p($cateData);
		// array(
	    // [0] => Array
	    //     (
	    //         [cid] => 18
	    //         [cname] => 上衣
	    //         [pid] => 17
	    //         [csort] => 100
	    //         [type_tid] => 12
	    //     )
	    // )
		$this->assign('cateData',$cateData);//将获取到的cate表(所属分类表)数据进行分配到添加页面中去
		// 这儿是进行获取品牌数据的过程
		$brandModel = new \Common\Model\Brand;
		$brandData = $brandModel->get();
		// p($brandData);
		// Array
		// (
		//     [0] => Array
		//         (
		//             [bid] => 9
		//             [bname] => 鸿星尔克
		//             [logo] => ./Upload/Logo/160729/41191469752801_thumb.jpg
		//             [bsort] => 100
		//             [ishot] => 1
		//         )
		$this->assign('brandData',$brandData);//将获取到的brand表(品牌表)数据进行分配到添加页面中去
		$this->display();
	}


	/**
	 * [edit 商品的编辑]
	 * @return [type] [description]
	 */
	public function edit(){
		if(IS_POST){
			// p($_POST);die;
			if($this->model->editGoods()){
				// die;
				$this->success('修改成功',U('Goods/index'));
			}
			// die;
			$this->error('修改失败');
		}
		$gid = Q('get.gid');
		// p($gid);
		// 2、商品信息(goods表)、列表图(goods表)
		$oldData = $this->model->where(array('gid'=>$gid))->find();
		// $oldData['pic'] = explode(',',$oldData['pic']);//将列表图进行数组组合。并且将其压入数组中.(列表图只有一张，可以不需要这样弄)
		// p($oldData);
		$this->assign('oldData',$oldData);//获取的是商品表(goods)里面的数据，并将其分配到数据库中
		// Array
		// (
		//     [gid] => 38
		//     [gname] => 包邮 2013时尚新款夏装卡通女士t恤圆领修身韩版短袖女T恤衫学院
		//     [gnumber] => 3434343
		//     [unit] => 件
		//     [marketprice] => 222
		//     [shopprice] => 111
		//     [pic] => Upload/list/160731/34531469897655.png,Upload/list/160731/66071469897655.png,Upload/list/160731/64481469897655.png
		//     [click] => 12345
		//     [time] => 1469897693
		//     [aid] => 1
		//     [tid] => 16
		//     [bid] => 10
		//     [cid] => 30
		// )
		// 1、页面需要的是所属分类(cate表)、所属品牌(brand表)、
		// 分别获取上面的所有表数据，并将其分配到页面中去。
		// 1、获取cate数据表，并选中当前需要点击的分类，selected;
		$cateModel = new \Common\Model\Cate;
		$cateData = $cateModel->get();
		$cateData = Data::tree($cateData,'cname');
		// p($cateData);
		//  [39] => Array
	        // (
	        //     [cid] => 39
	        //     [cname] => 新品到着
	        //     [pid] => 26
	        //     [csort] => 100
	        //     [type_tid] => 16
	        //     [_level] => 2
	        //     [_html] => 
	        //     [_first] => 1
	        //     [_end] => 
	        //     [_name] => ├─ 新品到着
	        // )
		// 分配数据到页面中去。
		$this->assign('cateData',$cateData);
		// 2、获取brand表里面的数据
		$brandModel = new \Common\model\Brand;
		$brandData = $brandModel->get();
		// p($brandData);
		// [1] => Array
	     //    (
	     //        [bid] => 10
	     //        [bname] => 意尔康
	     //        [logo] => ./Upload/Logo/160729/34471469752816_thumb.png
	     //        [bsort] => 100
	     //        [ishot] => 1
	     //    )
		$this->assign('brandData',$brandData);
		// 3、商品属性(goods_attr[class==2])、商品规格(goods_attr[class==1])、(这儿还涉及到class即表type_attr);
		$GattrModel = new \Common\Model\Gattr;
		// $GattrData = $GattrModel->where(array('gid'=>$gid))->get();
		$GattrData = $GattrModel->join('type_attr','type_taid','=','taid')->where(array('gid'=>$gid))->get();
		// p($GattrData);//这是总的数据，也就是说里面有属性及规格
		// 属性分组、规格分组
		$attrData = array();   //这是压缩属性的
		$specData = array();   //这是压缩规格的
		foreach ($GattrData as $key => $value) {
			$tavalue = explode(',',$value['tavalue']);  //将tavalue拆分为数组形式，然后在给她压入数组中.
			// p($tavalue);
			$value['tavalue'] = $tavalue;
			if($value['class']==2){
				$attrData[] = $value;   //将属性压入到属性数组中
			}else{
				$specData[] = $value;   //将规格压入到属性数组中
			}
		}
		// 进行tavalue的处理，将其分割成数组，存入到tavalue里面，然后在进行分配到页面中.
		
		// p($attrData);
		// p($specData);
		$this->assign('attrData',$attrData);//将属性分配到页面中
		$this->assign('specData',$specData);//将规格分配到页面中
		
		// 4、商品图册(detail表)、商品详情(detail表)、售后服务(detail表)
		$detailModel = new \Common\Model\Detail;
		$detailData = $detailModel->where(array('gid'=>$gid))->find();
		$detailData['big'] = explode(',',$detailData['big']);//将大图进行组合成数组，然后在将其压入到数组中。
		$detailData['medium'] = explode(',',$detailData['medium']);//将大图进行组合成数组，然后在将其压入到数组中
		$detailData['small'] = explode(',',$detailData['small']);//将大图进行组合成数组，然后在将其压入到数组中
		// p($detailData);
		$this->assign('detailData',$detailData);
		$this->display();
	}

	/**
	 * [del 删除商品信息]
	 * [需要删除三张表]
	 * [goods][detail][Gattr]
	 * @return [type] [description]
	 */
	public function del(){
		// p(Q('get.gid'));
		if($this->model->delGoods()){
			// die;
			$this->success('删除成功',U('Goods/index'));
		}
		// die;
		$this->error($this->model->getError());
	}




	// 获取当前分类的属性及其规格
	public function ajaxGetAttr(){
		// 接收post传输过来的类型id(tid);
		$tid = $_POST['tid'];
		// p($tid);
		$typeAttrModel = new \Common\Model\TypeAttr;
		$getAttrData = $typeAttrModel->where(array('type_tid'=>$tid))->get();
		// p($getAttrData);die;
		// <pre>Array
		// (
		//     [0] => Array
		//         (
		//             [taid] => 85
		//             [taname] => 款式
		//             [tavalue] => 直筒型|修身型|宽松型|蝙蝠型|斗篷型|高腰型|裙摆型|不规则型
		//             [class] => 2
		//             [type_tid] => 16
		//         )
		//  )
		foreach ($getAttrData as $k => $v) {
			// p($v);
			$getAttrData[$k]['tavalue'] = explode(',',$v['tavalue']);
		}
		// p($getAttrData);
		//   [0] => Array
        // (
        //     [taid] => 85
        //     [taname] => 款式
        //     [tavalue] => Array
        //         (
        //             [0] => 直筒型
        //             [1] => 修身型
        //             [2] => 宽松型
        //             [3] => 蝙蝠型
        //             [4] => 斗篷型
        //             [5] => 高腰型
        //             [6] => 裙摆型
        //             [7] => 不规则型
        //         )

        //     [class] => 2
        //     [type_tid] => 16
        // )
        // 将该数组分配到页面中去，进行循环
        View::ajax($getAttrData);
	}

	// 异步上传列表图*******************************
	/**
	 * 异步上传图片
	 */
	public function ajaxUpload(){
		$file = Upload::path('Upload/list/'.date('ymd'))->make();
		// p($file[0]);
		View::ajax($file[0]);
	}

	/**
	 * 异步删除图片
	 */
	public function ajaxDelImg(){
		if(unlink($_POST['url'])){
			View::ajax(1);
		}else{
			View::ajax(0);
		}
	}

	// 异步上传商品图册*******************************
	/**
	 * 异步上传图片
	 */
	public function ajaxUpload1(){
		//获取原图片，上传路径。
		$file = Upload::path('Upload/Photo/'.date('ymd'))->make();
		// p($file[0]);
		// 图片不存在的情况下，需要将错误压入到错误提示数组中，让外面的能接受到需要的错误信息
		// if(!$files){
		// 	$this->error = Upload::getError();
		// 	return;
		// }
		// p($file);
		// die;
		//缩略
		// $file============================== 图片
		// $outFile=========================== 缩略图文件
		// $thumbWidth======================== 缩略宽度
		// $thumbHeight======================= 缩略高度
		// $thunbType ======================== 缩略方式：
		// Image::thumb($file, $outFile, $thumbWidth, $thumbHeight, $thunbType);
		// 由上得出需要处理的事项：
		// 1、图片：$file
		$path = $file[0]['path'];
		// p($path);
		// die;
		// p($path);.// [path] => Upload/Photo/160730/78201469881391.png
		// 2、缩略图文件：$outFile ===>./Upload/Logo/160727/84861469607456_thumb.jpg
		$type = strrchr($path,'.');
		// 组合新的路径(三条路径 (大、中、小));
		// 大图图册路径
		$newPath = $file[0]['dir'].'/big/'. $file[0]['filename'].'_big'.$type;
		// 中图图册路径
		$newPath1 = $file[0]['dir'].'/medium/'. $file[0]['filename'].'_medium'.$type;
		// 小图图册路径
		$newPath2 = $file[0]['dir'].'/small/'. $file[0]['filename'].'_small'.$type;
		// p($type);==> .png
		// p($newPath);===>  Upload/Photo/160730//big/91281469883196_big.png
		// 大图图册路径的替换
		// str_replace($type,'_thumb'.$type,$path);
		$newPath = str_replace($path,$newPath,$path);
		// 中图图册路径的替换
		$newPath1 = str_replace($path,$newPath1,$path);
		// 小图图册路径的替换
		$newPath2 = str_replace($path,$newPath2,$path);
		// p($type);===>.jpg  组合右边的类型。
		// 将左边的也得替换成不同的路径
		// 拼接(替换)：160727/84861469607456_thumb.jpg
		// $newPath = str_replace($type,'_thumb'.$type,$path);   //将.jpg替换成_thumb.jpg，在路径$path中.
		// 3、组合缩略
		// 大图图册缩略
		Image::thumb($path, $newPath, 420, 560, 6);
		// 中图图册缩略
		Image::thumb($path, $newPath1, 75, 100, 6);
		// 小图图册缩略
		Image::thumb($path, $newPath2, 40, 40, 6);
		// p($newPath);
		// p($newPath1);
		// p($newPath2);
		// die;
		// die;
		// 组个新路径分配回异步那儿
		// p($file);
		$file[0]['newpath'] = $newPath;
		$file[0]['newPath1'] = $newPath1;
		$file[0]['newPath2'] = $newPath2;
		// p($file);die;
		View::ajax($file[0]);
	}

	/**
	 * 异步删除图片
	 */
	public function ajaxDelImg1(){
		if(unlink($_POST['url'])){
			View::ajax(1);
		}else{
			View::ajax(0);
		}
	}

	/**
	 * 异步删除修改图片
	 */
	public function ajaxDelImg2(){
		// p($_POST['url']);
		// Upload/Photo/160801/big/18501470036785_big.jpg  大图的图片路径.
		// 组合路径：
		// $pathSmall = strchr($_POST['url'],'big');  //===>_big.jpg
		$pathSmall = str_replace('big','small',$_POST['url']);
		$pathMedium = str_replace('big','medium',$_POST['url']);
		$path = str_replace('big/','',$_POST['url']);
		$path = str_replace('_big','',$path);
		if(unlink($_POST['url'])){
			unlink($pathMedium);
			unlink($pathSmall);
			unlink($path);
			View::ajax(1);
		}else{
			View::ajax(0);
		}
	}
}

?>